Skip to content

Conversation

bdrodes
Copy link
Contributor

@bdrodes bdrodes commented Oct 8, 2025

These are some example queries that check the cryptography present in output from a java source repo. Again, these build on the existing examples both in java and in other CBOM and cryptographic issue checking codeQL queries:

InsecureNonceGeneration.ql - as before
InsecureNonceSource.ql - as before
KnownWeakKDFIterationCount.ql - as before
NonAESGCMCipher.ql - detects non-AES in GCM mode ciphers. Can be updated to be 'non AES256 in GCM mode' but this gives more alerts on inferred key lengths.
ReusedNonce.ql - as before
UnknownKDFIterationCount.ql - as before
WeakAsymmetric.ql - finds weak asymmetric RSA ciphers using key lengths < 2048
WeakBlockModes.ql - similar to NonAESGCM, this finds instances of known-bad block modes ECB, CFB, OFB, and CTR
WeakHashing.ql - finds potentially weak hashing instances using the whitelist of SHA256, SHA384, and SHA512 (though this is yet to be checked against SHA3 variants)
WeakKDFIterationCount.ql - as before
WeakKDFKeySize.ql - as before
WeakRSA.ql - an allternative method from WeakAsymmetric.ql, but functionally the same.
WeakSymmetricCiphers.ql - detects known-weak ciphers from a blocklist of DES, TripleDES, DoubleDES, RC2, RC4, IDEA, and Blowfish.

@bdrodes bdrodes requested a review from a team as a code owner October 8, 2025 14:22
@Copilot Copilot AI review requested due to automatic review settings October 8, 2025 14:22
@bdrodes
Copy link
Contributor Author

bdrodes commented Oct 8, 2025

This PR is based on #20568, made a copy to be able to do my own quick edits.

Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds comprehensive Java cryptographic analysis queries to detect various security vulnerabilities and weak cryptographic practices. The changes include 11 new CodeQL analysis queries and updates to the underlying cryptographic models to improve consistency in naming conventions.

  • Adds 11 new analysis queries to detect weak cryptographic implementations including weak symmetric/asymmetric ciphers, poor block modes, weak hashing algorithms, and insecure key derivation functions
  • Updates cryptographic model naming from "Family" to "Type" for better consistency across elliptic curve and hash algorithm classifications
  • Modifies precision levels for some existing queries to improve analysis accuracy

Reviewed Changes

Copilot reviewed 16 out of 16 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
shared/quantum/codeql/quantum/experimental/Standardization.qll Renames elliptic curve type definitions from "Family" to "Type"
shared/quantum/codeql/quantum/experimental/Model.qll Updates method names and documentation to use "Type" instead of "Family"
java/ql/src/experimental/quantum/Analysis/*.ql Adds 11 new analysis queries for detecting cryptographic vulnerabilities
java/ql/lib/experimental/quantum/JCA.qll Updates method implementations to use new "Type" naming convention
cpp/ql/lib/experimental/quantum/OpenSSL/*.qll Updates C++ OpenSSL bindings to match new naming conventions

@bdrodes
Copy link
Contributor Author

bdrodes commented Oct 8, 2025

@nicolaswill this was meant to be a draft PR while I fix up the last issues, sorry about that. I don't see how I can move it back to draft, so I'll leave this open but ping when it is ready for final review.

…mpacts the insecure IV/Nonce query. Updated name of the Insecure nonce query to be InsecureIVorNonce
bdrodes and others added 6 commits October 8, 2025 12:55
…o fix false positives in the unknown IV/Nonce query). Add the unknown IV/Nonce query and associated test cases. Fix unknown IV/Nonce query to focus on cases where the oepration isn't known or the operation subtype is not encrypt or wrap.
…wn for it, and if so do not alert on non-secure random if it is tied to decryption
@nicolaswill
Copy link
Contributor

I'm hesitant to merge this into the out-of-box queries, as many of these are prescriptive about allowed/disallowed algorithms or thresholds for things like iteration count. I would suggest putting these into an Examples directory.

@nicolaswill nicolaswill marked this pull request as draft October 9, 2025 12:23
@@ -0,0 +1 @@
experimental/quantum/Examples/ReusedNonce.ql No newline at end of file

Check warning

Code scanning / CodeQL

Query test without inline test expectations Warning test

Query test does not use inline test expectations.
@bdrodes bdrodes marked this pull request as ready for review October 17, 2025 17:51
…with ql-for-ql, use formatted test for WeakAsymmetricKeyGenSize (add post processing in the qlref), misc expected files updated (test passed locally but on rerun vscode reports failures, known bug with vscode unit tests).
result = this.(KnownMacAlgorithm).getConsumer()
}

override int getKeySizeFixed() {

Check warning

Code scanning / CodeQL

Redundant override Warning

Redundant override of
this predicate
.
result = super.getKeySizeFixed()
}

override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() {

Check warning

Code scanning / CodeQL

Redundant override Warning

Redundant override of
this predicate
.
result = super.getKeySizeConsumer()
}

override string getRawAlgorithmName() {

Check warning

Code scanning / CodeQL

Redundant override Warning

Redundant override of
this predicate
.
…assessments, altering a few queries weak/vuln/bad crypto to have qll files that can be accessed for other purposes, like graph generation. Also altering weak symmetric cipher to look for non-aes algorithms to be more comprehensive.
*/

import java
import experimental.quantum.Language

Check warning

Code scanning / CodeQL

Redundant import Warning

Redundant import, the module is already imported inside
BadMacOrder
.
*/

import java
import experimental.quantum.Language

Check warning

Code scanning / CodeQL

Redundant import Warning

Redundant import, the module is already imported inside
BadMacOrder
.
…es in an ArtifactNode to be used for graph generation to intercept nodes with known mac ordering issues, in order to format the node and output error messages in the graph.
}

predicate isDecryptToMacNode(Crypto::ArtifactNode node) {
exists(ArtifactFlow::PathNode src, ArtifactFlow::PathNode sink |

Check warning

Code scanning / CodeQL

Omittable 'exists' variable Warning

This exists variable can be omitted by using a don't-care expression
in this argument
.
Copy link

@HeeMa6 HeeMa6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants